package version2024.medium;

import java.math.BigInteger;
import java.util.Scanner;

/**
 * @author sunhl
 * @Description: HJ57 高精度整数加法  字符串, BigInteger/双指针, 取余取模
 * @Date: created in 2025/1/2 星期四 20:14
 * @Modified By:
 */
public class HJ57_HighPrecisionIntegerAddition {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String s1 = in.next();
            String s2 = in.next();

            // calcByBigInteger(s1, s2);

            addByString(s1, s2);
        }
    }

    // BigInteger计算
    public static void calcByBigInteger(String s1, String s2) {
        BigInteger a = new BigInteger(s1);
        BigInteger b = new BigInteger(s2);

        System.out.println(a.add(b));
    }

    // 两个字符串整数相加
    public static void addByString(String s1, String s2) {
        StringBuilder res = new StringBuilder();
        int n = s1.length() - 1;
        int m = s2.length() - 1;
        // 进位
        int carry = 0;

        while (n >= 0 || m >= 0) {
            // 从两个字符串的最后一位开始相加, 没有了就用0代替
            char c1 = n >= 0 ? s1.charAt(n--) : '0';
            char c2 = m >= 0 ? s2.charAt(m--) : '0';
            // 两个数与子进位相加
            int sum = (c1 - '0') + (c2 - '0') + carry;

            // 余数添加进结果
            res.append(sum % 10);
            // 进位
            carry = sum / 10;
        }

        //最后的进位
        if (carry == 1) {
            res.append(carry);
        }

        String result = res.reverse().toString();

        System.out.println(result);
    }
}
